﻿// -- MVC4WPF
// -- Copyright © 2009 Information Control Corporation
// -- Revision History:
// -- Version 0.9.0.0 First codeplex release  - Stephen Giffin

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MVC4WPF.Automation;
using MVC4WPF.Automation.Dialog;
using MVC4WPF.Automation.Data;

namespace MVC4WPF.Automation.VisualStudio.Dialog
{
    /// <summary>
    /// Property bag class that holds all the information used for the creation of a contract.
    /// </summary>
    public class ControllerDialogPropertyBag : DialogBasePropertyBag
    {
        #region Property - ControllerType
        //Local variable for property ControllerType
        private MVCItemType _controllerType;

        /// <summary>
        /// Enumeration that determines the type of MVC4WPF controller that is being created
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public MVCItemType ControllerType
        {
            get
            {
                return _controllerType;
            }

            set
            {
                OnPropertyChanging("ControllerType");

                _controllerType = value;

                OnPropertyChanged("ControllerType");
            }
        }
        #endregion Property - ControllerType

        #region Property - ControllerContractsExist
        //Local variable for property ControllerContractsExist
        private bool _controllerContractsExist;

        /// <summary>
        /// A flag to determine if the visual studio project currently contains any controller contracts 
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public bool ControllerContractsExist
        {
            get
            {
                return _controllerContractsExist;
            }

            set
            {
                OnPropertyChanging("ControllerContractsExist");

                _controllerContractsExist = value;

                OnPropertyChanged("ControllerContractsExist");
            }
        }
        #endregion Property - ControllerContractsExist

        #region Property - ControllerUsesControllerContract
        //Local variable for property ControllerUsesControllerContract
        private bool _controllerUsesControllerContract;

        /// <summary>
        /// A flag to determine if the controller will implement a contract
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public bool ControllerUsesControllerContract
        {
            get
            {
                return _controllerUsesControllerContract;
            }

            set
            {
                OnPropertyChanging("ControllerUsesControllerContract");

                _controllerUsesControllerContract = value;

                OnPropertyChanged("ControllerUsesControllerContract");
            }
        }
        #endregion Property - ControllerUsesControllerContract

        #region Property - SelectedControllerContract
        //Local variable for property SelectedControllerContract
        private ContractType _selectedControllerContract;

        /// <summary>
        /// The contract definition for the selected controller contract
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public ContractType SelectedControllerContract
        {
            get
            {
                return _selectedControllerContract;
            }

            set
            {
                OnPropertyChanging("SelectedControllerContract");

                _selectedControllerContract = value;

                OnPropertyChanged("SelectedControllerContract");
            }
        }
        #endregion Property - SelectedControllerContract

        #region Property - AvailableControllerContracts
        //Local variable for property AvailableControllerContracts
        private List<ContractType> _availableControllerContracts;

        /// <summary>
        /// List of contract definitions that can be selected for the controller
        /// </summary>
        public List<ContractType> AvailableControllerContracts
        {
            get
            {
                return _availableControllerContracts;
            }

            set
            {
                OnPropertyChanging("AvailableControllerContracts");

                _availableControllerContracts = value;

                OnPropertyChanged("AvailableControllerContracts");
            }
        }
        #endregion Property - AvailableControllerContracts

        #region Property - SelectedViewContract
        //Local variable for property SelectedViewContract
        private ContractType _selectedViewContract;

        /// <summary>
        /// The view contract definition that should be used with this contract
        /// </summary>
        public ContractType SelectedViewContract
        {
            get
            {
                return _selectedViewContract;
            }

            set
            {
                OnPropertyChanging("SelectedViewContract");

                _selectedViewContract = value;

                OnPropertyChanged("SelectedViewContract");
            }
        }
        #endregion Property - SelectedViewContract

        #region Property - AvailableViewContracts
        //Local variable for property AvailableViewContracts
        private List<ContractType> _availbleViewContracts;

        /// <summary>
        /// List of view contracts that can be selected for controller
        /// </summary>
        public List<ContractType> AvailableViewContracts
        {
            get
            {
                return _availbleViewContracts;
            }

            set
            {
                OnPropertyChanging("AvailableViewContracts");

                _availbleViewContracts = value;

                OnPropertyChanged("AvailableViewContracts");
            }
        }
        #endregion Property - AvailableViewContracts

        #region Property - ModelContractsExist
        //Local variable for property ModelContractsExist
        private bool _modelContractsExist;

        /// <summary>
        /// A flag to determine if the visual studio project currently contains any model contracts 
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public bool ModelContractsExist
        {
            get
            {
                return _modelContractsExist;
            }

            set
            {
                OnPropertyChanging("ModelContractsExist");

                _modelContractsExist = value;

                OnPropertyChanged("ModelContractsExist");
            }
        }
        #endregion Property - ModelContractsExist

        #region Property - ControllerUsesModelContract
        //Local variable for property ControllerUsesModelContract
        private bool _controllerUsesModelContract;

        /// <summary>
        /// A flag to determine if the model will implement a contract
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public bool ControllerUsesModelContract
        {
            get
            {
                return _controllerUsesModelContract;
            }

            set
            {
                OnPropertyChanging("ControllerUsesModelContract");

                _controllerUsesModelContract = value;

                OnPropertyChanged("ControllerUsesModelContract");
            }
        }
        #endregion Property - ControllerUsesModelContract

        #region Property - SelectedModelContract
        //Local variable for property SelectedModelContract
        private ContractType _selectedModelContract;

        /// <summary>
        /// The contract definition for the selected model contract
        /// </summary>
        /// <remarks>
        /// This property supports INotifyPropertyChanged and INotifyPropertyChanging
        /// </remarks>
        public ContractType SelectedModelContract
        {
            get
            {
                return _selectedModelContract;
            }

            set
            {
                OnPropertyChanging("SelectedModelContract");

                _selectedModelContract = value;

                OnPropertyChanged("SelectedModelContract");
            }
        }
        #endregion Property - SelectedModelContract

        #region Property - AvailableModelContracts
        //Local variable for property AvailableModelContracts
        private List<ContractType> _availableModelContracts;

        /// <summary>
        /// List of contract definitions that can be selected for the model
        /// </summary>
        public List<ContractType> AvailableModelContracts
        {
            get
            {
                return _availableModelContracts;
            }

            set
            {
                OnPropertyChanging("AvailableModelContracts");

                _availableModelContracts = value;

                OnPropertyChanged("AvailableModelContracts");
            }
        }
        #endregion Property - AvailableModelContracts
    }
}
